看完 Masonry 源码后的几点思考?
最近花了两周的时间读了 Masonry
源码,被它优雅的语法深深打动。它把 Apple
原生 AutoLayout
冗长,繁琐的约束语法真是封装得简洁优雅到了极致。每一次看,都能看到不一样的东西,在这里也强烈推荐各位小伙伴阅读它的源码。我把我在看源码期间想到的问题,收获,总结到了下面几个问题中,您看能答出来多少呢?欢迎在下方评论。
Masonry
都做了些什么?
2.下面代码会发生循环引用吗,为什么?
|
|
MAS_SHORTHAND
、MAS_SHORTHAND_GLOBALS
宏是做什么用的?它的效果是怎么实现的呢?
Masonry
的makeConstraints:
、updateConstraints:
、remakeConstraints:
有什么区别,分别适合那些场景?- 描述下代码
make.left.right.top.equalTo(self.view).offset(0);
都做了些什么? Masonry
是如何做到链式优雅调用的?
下面几个问题可能比较细节,希望不要介意。
MASViewConstraint
为什么要弱引用一个 MASLayoutConstraint 的实例对象,它又用这个对象做了什么?MASConstraintMaker
持有一个constraints
数组, 而MASViewConstrint
类也有一个用来记录约束的数组,这两个数组都是用来记录生成的约束,那么这两个数组有什么区别吗?各自的作用又是什么?- 1234567- (NSArray *)mas_updateConstraints:(void(^)(MASConstraintMaker *))block {self.translatesAutoresizingMaskIntoConstraints = NO;MASConstraintMaker *constraintMaker = [[MASConstraintMaker alloc] initWithView:self];constraintMaker.updateExisting = YES;block(constraintMaker);return [constraintMaker install];}
上述源码中,
MASConstraintMaker
的初始化方法initWithView:
为MASConstraintMaker
初始化了一个view
属性 ,MASConstraintMaker
持有这个view
做什么? MASConstraintMaker
都在什么时候会初始化MASViewAttribute
对象?
尽管笔者水平有限,但对这些问题的拙劣见解还是会在下篇文章中放出,在这希望可以抛砖引玉,期待各位大牛共同探讨 Masonry
优雅的精髓。